package com.example.selenium.queue.rabbitmq.f;

import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;

/**
 * 如果 配置了simpleMessageListenerContainer这个Bean对象，那么这里的 方法不生效
 */
//@Configuration
public class MessageListener {
    
    /**
     * 直连型队列：根据消息携带的路由键将消息投递给对应队列。
     * @param msg
     */
    @RabbitHandler
    @RabbitListener(queues = "myDirectQueue")
    public void process(String msg) {
        System.out.println("myDirectQueue接收消息了，消息内容："+msg);
    }
    
    /**
     * 扇形队列： 扇型交换机，这个交换机没有路由键概念，就算你绑了路由键也是无视的。 这个交换机在接收到消息后，会直接转发到绑定到它上面的所有队列
     */
    /***********************扇形消息*****************************/
    @RabbitHandler
    @RabbitListener(queues = "fanoutQueueA")
    public void processA(String msg) {
        System.out.println("fanoutQueueA " + msg);
    }
    
    @RabbitHandler
    @RabbitListener(queues = "fanoutQueueB")
    public void processB(String msg) {
        System.out.println("fanoutQueueB " + msg);
    }
    
    @RabbitHandler
    @RabbitListener(queues = "fanoutQueueC")
    public void processC(String msg) {
        System.out.println("fanoutQueueC " + msg);
    }

  /**
   * 主题交换机：
   * 主题交换机，这个交换机其实跟直连交换机流程差不多，但是它的特点就是在它的路由键和绑定键之间是有规则的。 简单地介绍下规则：
   * <p>* (星号) 用来表示一个单词 (必须出现的) # (井号) 用来表示任意数量（零个或多个）单词
   */
  /** ********************主题消息***************************** */
  @RabbitHandler
  @RabbitListener(queues = "myTopicQueue_01")
  public void process_01(String msg) {
        System.out.println("myTopicQueue_01 " + msg);
    }
    
    @RabbitHandler
    @RabbitListener(queues = "myTopicQueue_02")
    public void process_02(String msg) {
        System.out.println("myTopicQueue_02 " + msg);
    }
}